home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / fido / mmail.000 / mmail / mmail.0.1 / interface / arealist.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-27  |  7.0 KB  |  251 lines

  1. /*
  2.  * MultiMAIL offline mail reader
  3.  * 
  4.  
  5.    Written by Kolossvary Tamas (thomas@vma.bme.hu)
  6.  
  7.    This program is free software; you can redistribute it and/or modify
  8.    it under the terms of the GNU General Public License as published by
  9.    the Free Software Foundation; either version 2, or (at your option)
  10.    any later version.
  11.  
  12.    This program is distributed in the hope that it will be useful,
  13.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.    GNU General Public License for more details.
  16.  
  17.    You should have received a copy of the GNU General Public License
  18.    along with this program; if not, write to the Free Software
  19.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  20.  
  21. #include "interface.h"
  22.  
  23. extern mmail        mm;
  24. extern packet_list    *packetList;
  25. extern letter_list     *letterList;
  26. extern AreaListWindow    areas;
  27. extern LetterListWindow letters;
  28. extern LetterWindow     letterwindow;
  29. extern HelpWindow     helpwindow;
  30. extern Interface     interface;
  31. extern AddressBook    addresses;
  32. extern int getstring(WINDOW *, int, int, char *, int, int, int);
  33.  
  34. //**************    LittleAreaListWindow    *****************
  35.  
  36. LittleAreaListWindow :: LittleAreaListWindow (char param_key)
  37. {
  38.  int i;
  39.  
  40.  key=param_key; 
  41.  list=newwin(LINES-6, 25, 2, 30);
  42.  list_max_y = LINES-9;
  43.  init_pair(15, COLOR_WHITE, COLOR_BLUE);
  44.  wattrset(list, COLOR_PAIR(15) | A_BOLD);
  45.  for(i=0; i < (LINES-6)*25; i++)
  46.     waddch(list, ' ');
  47.  wborder(list, 0, 0, 0, 0, 0, 0, 0, 0); 
  48.  areas.Reset_areaList();
  49.  while(active != mm.areaList->getAreaNo() - 2)
  50.     Move(DOWN);
  51.  mvwaddstr(list, 1, 2, "Reply goes to area:");
  52.  Draw();
  53. }
  54.  
  55. LittleAreaListWindow :: ~LittleAreaListWindow (void)
  56. {
  57.  mm.areaList->gotoArea(active+2);
  58.  letterwindow.set_Letter_Params(active + 2, key);
  59.  delwin(list);
  60.  letterwindow.ReDraw();
  61. }
  62.  
  63. void LittleAreaListWindow :: Draw (void)
  64. {
  65.  int i; 
  66.   init_pair(16, COLOR_YELLOW, COLOR_BLUE);
  67.  mm.areaList->gotoArea(position+2);
  68.  i=1; 
  69.  while(i < list_max_y)
  70.  {
  71.     wattrset(list, COLOR_PAIR(16) | A_BOLD);
  72.     if(position+i-1 == active)
  73.         wattron(list, A_REVERSE);
  74.      mvwprintw(list, i+2, 2, "%-21s", mm.areaList->getName());
  75.     if(position+i == NumOfItems()) 
  76.         i=list_max_y;
  77.     i++;
  78.     mm.areaList->gotoArea(mm.areaList->getAreaNo() + 1);
  79.  }
  80.  wnoutrefresh(list);
  81. }
  82.  
  83. int LittleAreaListWindow :: NumOfItems (void)
  84. {
  85.  return mm.areaList->noOfAreas() - 1; //-1 is the reply area  
  86. }
  87.  
  88. //*************     AreaListWindow        ******************
  89.  
  90. void AreaListWindow :: ReDraw(void)
  91. {
  92.  touchwin(list);
  93.  wnoutrefresh(list);
  94.  touchwin(info);
  95.  wnoutrefresh(info);
  96. }
  97.  
  98. void AreaListWindow :: FirstUnread(void)
  99. {
  100.  int i;
  101.  
  102.  position = 0;
  103.  active = 0;
  104.  list_max_y = LINES-14;
  105.  for(i=0; i<NumOfItems(); i++)
  106.  {
  107.     mm.areaList->gotoArea(i+1);
  108.     if(!mm.areaList->getNoOfUnread())
  109.     {
  110.         Move(DOWN);
  111.         Draw();
  112.         doupdate();
  113.     }
  114.     else
  115.         i=NumOfItems();
  116.  }
  117. }
  118.  
  119. void AreaListWindow :: Reset_areaList(void)
  120. {
  121.  mm.areaList->gotoArea(active + 1);
  122. }
  123.  
  124. int AreaListWindow :: NumOfItems(void)
  125. {
  126.  return mm.areaList->noOfAreas();
  127. }
  128.  
  129. void AreaListWindow :: Draw(void)
  130. {
  131.  int i;
  132.  char tmp[21];
  133.  
  134.  init_pair(bw, COLOR_CYAN, COLOR_BLACK);
  135.  init_pair(qwk, COLOR_GREEN, COLOR_BLACK);
  136.  init_pair(usenet, COLOR_WHITE, COLOR_BLACK);
  137.  init_pair(mail, COLOR_RED, COLOR_BLACK);
  138.  init_pair(bwrep, COLOR_YELLOW, COLOR_BLACK);
  139.  init_pair(15, COLOR_YELLOW, COLOR_BLACK);
  140.  init_pair(16, COLOR_WHITE, COLOR_BLACK);
  141.  for(i=1; i<list_max_y; i++)
  142.  {
  143.     mm.areaList->gotoArea(position+i);
  144.     wattrset(list, COLOR_PAIR(mm.areaList->getType()) | A_NORMAL);
  145.     if (mm.areaList->getNoOfUnread() > 0) wattron(list, A_BOLD);
  146.     //             ^^^ide majd a getNoOfUnread() kell
  147.     if (position+i-1 == active) wattron(list, A_REVERSE);
  148.         
  149.     mvwprintw(list, i+1, 1, " %-6s ", mm.areaList->getShortName()); 
  150.     mvwprintw(list, i+1, 9, " %-21s", mm.areaList->getName());
  151.     if (mm.areaList->getNoOfLetters())
  152.         wprintw(list, "  %5d", mm.areaList->getNoOfLetters());
  153.     else wprintw(list, "      .");
  154.     if (mm.areaList->getNoOfUnread())
  155.         wprintw(list, "    %5d", mm.areaList->getNoOfUnread());
  156.     else wprintw(list, "        .");   
  157.         if (mm.areaList->getNoOfPersonal())
  158.                 wprintw(list, "      %5d    ", mm.areaList->getNoOfPersonal());
  159.         else wprintw(list, "          .    ");
  160.  
  161.     if((position+i) == NumOfItems()) i=list_max_y;
  162.  }
  163.  wnoutrefresh(list);
  164.  
  165.  mm.areaList->gotoArea(active+1);
  166.  wattrset(info, COLOR_PAIR(15) | A_BOLD);
  167.  switch(mm.areaList->getType())
  168.  {
  169.       case bw: mvwaddstr(info, 1, 2, " BBS:                        Sysop: ");
  170.          mvwaddstr(info, 2, 2, "Type:                       Packet: ");
  171.           mvwaddstr(info, 3, 2, "Area description: ");
  172.          wattrset(info, COLOR_PAIR(16) | A_BOLD);
  173.          strncpy(tmp, mm.areaList->getProviderName(), 20);
  174.          tmp[20] = '\0';
  175.          mvwaddstr(info, 1, 8, tmp);
  176.          mvwprintw(info, 1, 38, "%-20s", mm.areaList->getOperatorName());
  177.          mvwprintw(info, 2, 8, "Bluewave");
  178.          mvwprintw(info, 2, 38, "%12s", packetList->getName());
  179.          mvwprintw(info, 3, 20, "%-50s", mm.areaList->getDescription()); 
  180.          break;
  181.       case qwk: break;
  182.     case mail: break;
  183.     case usenet: break;
  184.     case bwrep: mvwaddstr(info, 1, 2, " BBS:                        Sysop: ");
  185.             mvwaddstr(info, 2, 2, "Type:                         File: ");
  186.              mvwaddstr(info, 3, 2, "Area description: ");
  187.             wattrset(info, COLOR_PAIR(16) | A_BOLD);
  188.             strncpy(tmp, mm.areaList->getProviderName(), 20);
  189.             tmp[20] = '\0';
  190.             mvwaddstr(info, 1, 8, tmp);
  191.             mvwprintw(info, 1, 38, "%-20s", mm.areaList->getOperatorName());
  192.             mvwprintw(info, 2, 8, "Bluewave NEW");
  193.             mvwprintw(info, 2, 38, "%12s", packetList->getName());
  194.             mvwprintw(info, 3, 20, "%-50s", mm.areaList->getDescription()); 
  195.             break;
  196.  }
  197.  touchwin(info);
  198.  wnoutrefresh(info);
  199. }
  200.  
  201. void AreaListWindow :: MakeActive (void)
  202. {
  203.  int i;
  204.  
  205.  init_pair(11, COLOR_GREEN, COLOR_BLACK);
  206.  init_pair(12, COLOR_YELLOW, COLOR_BLACK);
  207.  init_pair(13, COLOR_MAGENTA, COLOR_BLACK);
  208.  list=newwin(LINES-12, COLS-4, 2, 2);
  209.  list_max_y = LINES-14;
  210.  wattron(list, COLOR_PAIR(11) | A_BOLD);
  211.  for (i=0; i<(COLS-6)*(LINES-12); i++)
  212.     waddch(list, ' ');
  213.  wattrset(list, COLOR_PAIR(12) | A_BOLD);
  214.  wborder(list, 0, 0, 0, 0, 0, 0, 0, 0);
  215.  mvwaddch(list, 0, 2, ACS_RTEE);
  216.  wattrset(list, COLOR_PAIR(11) | A_BOLD);
  217.  wprintw(list, "Message Areas (%d)", mm.areaList->noOfAreas());
  218.  wattrset(list, COLOR_PAIR(12) | A_BOLD);
  219.  waddch(list, ACS_LTEE);
  220.  
  221.  wattrset(list, COLOR_PAIR(13));
  222.  mvwaddstr(list, 1, 2, "Area#   Area                   Total     Unread  \
  223.    Personal");  
  224.  
  225.  info=newwin(5, COLS-4, LINES-11, 2);
  226.  wattron(info, COLOR_PAIR(11) | A_BOLD);
  227.  for (i=0; i<5*(COLS-4); i++)
  228.     waddch(info, ' ');
  229.  wattrset(info, COLOR_PAIR(12) | A_BOLD); 
  230.  wborder(info, 0, 0, 0, 0, ACS_LTEE, ACS_RTEE, 0, 0);
  231.  wmove(info, 0, 2);
  232.  waddch(info, ACS_RTEE);
  233.  wattrset(info, COLOR_PAIR(11) | A_BOLD);
  234.  waddstr(info, "Info On The Specified Area");
  235.  wattrset(info, COLOR_PAIR(12) | A_BOLD);
  236.  waddch(info, ACS_LTEE);
  237.  
  238.  Draw();
  239.  helpwindow.arealist();
  240. }
  241.  
  242. void AreaListWindow :: Delete (void)
  243. {
  244.  letterList = mm.areaList->getLetterList();  
  245.  delwin(list);
  246.  delwin(info);
  247.  helpwindow.Delete();
  248.  touchwin(screen);
  249.  wnoutrefresh(screen);
  250. }
  251.